L02: Shell, prompt, bash

linux.edumach.cz



1. Terminologie

Toto je důležité na pochopení. S těmito termíny budem pracovat.

2. Shell

V našich hodinách (a doma) budeme používat vzdálený shell na našem cvičném serveru, který slouží právě k těmto účelům. Výhodou je, že je dostupný odkudkoliv, pokud máte k dispozici počítač a internet. Spojení je šifrované. Pokud se například na vysoké škole potkáte s Linuxem, bude to právě tímto způsobem.

Otázka: Co znamená "server"? Jinými slovy, čím se liší běžný počítač od serveru?

Připojit se pochopitelně může pouze uživatel, který na něm má zřízený účet. Přihlašovací údaje jsou následující:

3. Z čeho se připojit

Existuje několik možností (aplikací). Nám postačí ten, který nevyžaduje žádný dodatečný SW. Stačí aplikace PowerShell Windows. Spusťte jej a zapište:

ssh 10XPrijmeniJ@tux.panska.cz 

Při prvním přihlášení na konkrétním počítači (škola, doma) musíte navíc odsouhlasit připojení k "neznámému" počítači: zapsat yes a Enter).

Pak zapište vaše školní heslo a potvrďte (Enter). V terminálu se nebude nic vypisovat - přesto se heslo píše.

4. Prompt (výzva)

Po přihlášení uvidíte stylizovanou uvítací ASCII grafiku TuXe, ale hlavně prompt. To je ten poslední řádek dole ve tvaru:

jmeno@pocitac ~ 
$ 

Do promptu zapisujeme příkazy a další věci a shell (v tomto případě bash) je vykoná.

Vzhled promptu jde změnit. V různých systémech proto může vypadat odlišně:

macOS:~ pepa$ 
pepa@debian:~$ 
[pepa@fedora ~]$ 

Časem se k tomu také dostaneme 😊

5. Shell (příkazový interpret)

Příkazový interpret (shell) přijímá příkazy a realizuje je (to je to "černé okno"). Má svůj vlastní programovací jazyk a programy napsané v tomto jazyce se nazývají skripty (Shell scripts).

Existuje řada různých shellů, např. ash, csh, bash, tcsh, zsh, pdksh... V Linuxu nejpoužívanějším je právě bash.

6. bash

Bash (Bourne Again Shell) je standardní interpret příkazů v Linuxu založený na Bourne shell. Funguje jako rozhraní mezi uživatelem a systémem.

Jelikož je součástí GNU projektu, nebylo problémem ho portovat na unixové systémy, takže jeho znalost uplatníte i mimo Linux, např. na macOS. Tam je výchozím shellem zsh.

Jde používat i v interaktivním režimu (takto jej budeme běžně používat i my). Pokud máte před sebou otevřený terminál, pak ho právě v tomto režimu používáte. To je standardní postup, který čeká na zadání příkazu od uživatele. Příkazy mohou být buď přímo zabudované v shellu nebo samostatné programy napsané téměř v libovolném programovacím jazyce.

Vyzkoušejte si to zadáním tohoto příkazu, který vypíše, jaký shell používáte:

$ echo $SHELL 

Ten symbol $ na začátku řádku je zažitá konvence. Říká, že "to za tímto symbolem je příkaz".

Unixové systémy jsou citlivé na velikost znaků. $SHELL musí být velkými písmeny, protože jde o interní proměnnou systému.

Pomocí systémových proměnných umožňuje přizpůsobení pracovního prostředí. Některé z těchto proměnných jsou přednastaveny systémem, ostatní nastavuje uživatel např. v inicializačních souborech při spuštění shellu.

Bash je také velice mocný skriptovací nástroj. Když nám chybí nějaký program, nemusíme ho hned psát v jazyce C nebo Python, ale je možné vyřešit ho vytvořením skriptu.

Jinými slovy: Bash vás bude provázet po celou dobu práce s Linuxem.

7. PowerShell

Nakonec nemohu nezmínit tento terminál.

Windows od pradávna obsahoval a stále obsahuje terminálový program "Příkazový řádek Windows". Pro základní činnosti stačí, ale je to opravdu "jen" příkazový řádek. S možnostmi linuxových shellů (např. bash) se ani náhodou nedá poměřovat.

Microsoft si toho byl vědom a proto, ale nejen proto přišel v roce 2006 s Windows 7 vylepšeným terminálem PowerShell.

Domovská stránka: https://learn.microsoft.com/cs-cz/powershell/

Poznámka: Ve Windows 11 je trochu matoucí, že zapsáním příkazu cmd se automaticky spustí PowerShell namísto Příkazového řádku. Ve Windows 10 by se spustil klasický příkazový řádek (ajťáky přezdívaný "komandlajna").

Než si popíšeme jeho vlastnosti a možnosti, jedna naprosto nevídaná věc. Věřte nevěřte, PowerShell je šířený pod svobodnou licencí MIT a proto k dispozici i pro jiné OS jako Linux nebo macOS.

Z hlavních vlastností PowerShelu zmíním alespoň tyto. Uživatelé Bashe a ostatních shellů je považují za naprosto normální. S prvními čtyřmi se v hodinách potkáme:

  1. Klávesa TAB funguje k doplňování příkazů a názvů souborů/složek.
  2. Pamatuje si dříve zapsané příkazy (udržuje jejich historii). Listovat lze klávesami šipka nahoru a dolu.
  3. Podporuje přesměrování a rouru. "Bez roury nejde žít".
  4. Obsahuje skriptovací jazyk, což znamená, že umí spouštět skripty, má proměnné, cykly, větvení a jiné běžné programátorské prvky.
  5. Další funkcionality (příkazy) se importují jako moduly. V linuxu je trochu jiný koncept. Tam se toto dělá instalací příslušných programů.
  6. Na rozdíl od Bashe umí pracovat s objekty (podporuje objektové programování). To jsou takové ty zápisy proměnných s tečkovou notací.
  7. Aby si Windows nepletl soubor se skriptem v PowerShellu s obrázkem ve Photoshopu (.ps), má skript příponu .ps1.

Microsoft s ním samozřejmě nepřišel "jen tak". Stále ve větším rozsahu se řada, zejména systémových nastavení provádí právě pomocí příkazů v PowerShellu. Jinými slovy, vývojáři v MS konečně pochopili, že nejde pro každé nastavení vytvářet klikací aplikaci. Je to přesně naopak: příkazy (a skripty) v terminálu jsou mnohem výkonnější a efektivnější. O tomtéž se budu snažit přesvědčit i vás 😊

8. Chci Linux ve svém počítači

8.1. Linux ve Windows

Pokud máte Windows a chtěli byste si v něm hrát s Linuxem, nainstalujte si ho z MS Storu jako aplikaci. Aby to fungovalo musíte si nejprve do Windows nainstalovat podporu v podobě WSL. Nebojte, je to velmi snadné.

Pokud by vám později chyběl nějaký terminálový příkaz (aplikace), lze jej snadno nainstalovat pomocí správce balíků apt. Ten používá Debian a všechny jeho odvozeniny, jako Ubuntu nebo Mint. Využijte např. tento návod.

8.2. Linux v macOS

Tady je odpověď snadná: vy už "Linux" máte. Stačí spustit aplikaci Terminál.

Apple v macOS jako shell tradičně používá zsh. Mě osobně víc vyhovuje bash. Není problém jej aktivovat příkazem:

$ chsh –s /bin/bash 

Pokud by vám později chyběl nějaký terminálový příkaz (aplikace), lze jej snadno nainstalovat pomocí Homebrew https://brew.sh/cs/. Je to vlastně takový "linuxový" repozitář pro macOS.

9. 📝 Úkoly

  1. Existuje řada různých shellů, např. ash, csh, bash, tcsh, zsh, pdksh... Vyberte si jeden a popište ho: hlavní vlastnosti, syntaxi, funkce a možné využití. Zaměřte se také na to, čím se daný shell odlišuje od shellu bash.

  2. Změna shellu: Vytvořte přehledný návod, jak zjistit dostupné shelly v unixovém systému, jak jej změnit a jak ověřit, že je aktivní.

  3. ssh: Jaké jsou hlavní využití a výhody protokolu SSH (Secure Shell) v souvislosti s připojováním ke vzdáleným serverům a správou vzdálených zařízení? Jak může správné použití SSH přispět k zabezpečení komunikace a ochraně dat při práci se vzdálenými systémy?

  4. WSL ve Windows: Jaké jsou hlavní výhody a funkce WSL (Windows Subsystem for Linux) ve Windows a jak může tento nástroj přispět vývojářům a uživatelům, kteří pracují s operačním systémem Windows?